home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / embedded / m68k / tutor.arc / H.SA < prev    next >
Text File  |  1990-01-05  |  9KB  |  273 lines

  1. H        IDNT      1,1       Register save,Trace, Breakpoint         03/03/82
  2.          XDEF      CHKBP
  3.          XDEF      SAVE
  4.          XDEF      SWAPOUT
  5.          XDEF      TRACE
  6.          XDEF      UNSTACK
  7.          XDEF      UNTRACE
  8.  SPC 2
  9.          XREF      ABORT335
  10.          XREF.S    AV4
  11.          XREF.S    AV9
  12.          XREF.S    BPADD
  13.          XREF.S    BPCNT
  14.          XREF.S    BPDATA
  15.          XREF.S    BPSTATUS
  16.          XREF      FIXDCRLF
  17.          XREF      FIXDATA
  18.          XREF      FIRST
  19.          XREF      GOCMD1
  20.          XREF      LAST
  21.          XREF      MACSBUG
  22.          XREF      OUT1CR
  23.          XREF.S    REGA7
  24.          XREF.S    REGPC
  25.          XREF.S    REGS
  26.          XREF.S    REGSR
  27.          XREF.S    REGUS
  28.          XREF.S    SAVEAV4
  29.          XREF.S    SYSTACK
  30.          XREF      TDISPLY
  31.          XREF.S    TRACECNT
  32.          XREF.S    TRACEON
  33.          XREF.S    TEMP
  34.          XREF      V2
  35.  
  36. BKPOINT  EQU       $4AFB
  37. EOT      EQU       4
  38. BELL     EQU       7
  39.  SPC 1
  40. ADDR2MEM MACRO
  41.          PEA.L     \1(PC)              MOVE ADDRESS TO MEMORY
  42.          MOVE.L    (A7)+,\2
  43.          ENDM
  44.  SPC 1
  45. SAVEREGS MACRO
  46.          MOVE.L    A7,REGA7            SAVE STACK POINTER
  47.          LEA       SV\@(PC),A7    A7   = RETURN ADDRESS (FOR CALL TO SAVE)
  48.          MOVE.L    A7,TEMP             TEMP = RETURN ADDRESS
  49.          BRA       SAVE                BSR WITHOUT USING STACK
  50. SV\@     DS        0
  51.  SPC 1
  52.          ENDM
  53.  SPC 1
  54.  PAGE
  55.          SECTION   10
  56.          ADDR2MEM  CHKBP,AV4           ILLEGAL INSTRUCTION
  57.  
  58.          SECTION   11
  59.  
  60. *
  61. *       SAVE ALL REGISTERS ROUTINE-JMP [TEMP] BACK
  62. *          USUALLY CALLED BYE THE MACRO "SAVEREGS"
  63. SAVE     DS        0
  64.          LEA     REGA7,A7      WHERE TO START STORING
  65.          MOVEM.L D0-D7/A0-A6,-(A7)  SAVE REGISTERS
  66.  SPC 1
  67.          LEA     SYSTACK+4,A7  SET UP STRETCHED VERSAUG STACK
  68.  SPC 1
  69.          MOVE.L REGA7,A0  A0 = TARGETS SUPERVISOR STACK POINTER
  70.          MOVE.W (A0)+,REGSR+2 GET TARGETS SR
  71.  SPC 1
  72.          MOVE.L (A0)+,REGPC  GET TARGETS PC
  73.  SPC 1
  74.          MOVE.L A0,REGA7  WHERE TARGET STACK REALLY POINTS
  75.  SPC 1
  76.          MOVE.L USP,A1  GET USERS STACK POINTER
  77.          MOVE.L A1,REGUS  SAVE IT FOR DISPLAY ETC
  78.  SPC 1
  79.          MOVE.L REGPC,D0  GET PROGRAM COUNTER
  80.          SUB.L     #4,A7     SET REAL MACSBUG STACK
  81.          MOVE.L TEMP,-(A7)  PUT RETURN ADDRESS ON STACK
  82.          RTS   .  RETURN TO SENDER
  83.          PAGE
  84. *
  85. *     ***TRACE***  TRACE ENTRY POINT
  86. *       ENTER FROM VECTOR 9  (LOCATION 24) FOR
  87. *
  88.  SPC 1
  89. * REGISTER USAGE
  90. *  A0 = ADDRESS OF BREAKPOINT ADDRESS
  91. *  A2 = ADDRESS OF BREAKPOINT COUNTS
  92. *  D1 = PC
  93. *  D5 = TRACECNT
  94. *  D7 = BKPT COUNT
  95. TRACE    MOVE.W #$2700,SR  MASK OFF INTERRUPTS
  96.          SAVEREGS
  97. * IF PC POINTS TO 'TRACE'; DOUBLE EVENT OCCURED
  98. *  CLEAR LAST EVENT BY IGNORING
  99. *
  100.          CMP.L     #V2,REGPC
  101.          BNE.S     TRACE16
  102.  SPC 1
  103.          MOVE.L    REGA7,A5            TRIM LAST EVENT FROM STACK
  104.          MOVE.W    (A5)+,REGSR+2       *MOVE VALUES FROM STACK TO
  105.          MOVE.L    (A5)+,REGPC         *PSUEDO SR, PC,
  106.          MOVE.L    A5,REGA7            *REFLECT ADJUSTMENTS IN PSUEDO STACK
  107. TRACE16  AND.W     #$7FFF,REGSR+2      RESET "T" (TRACE) BIT
  108.  SPC 2
  109.  
  110.          MOVE.L    TRACECNT,D5
  111.          BMI.S     TRACE39             EXECUTING ONE-INSTRUCTION
  112.          BEQ       ABORT335            NOT TRACEING
  113.  SPC 1
  114. *   MAKE SURE WE ARE NOT TRACING OURSELVES
  115.          MOVE.L    REGPC,D1  GET PC
  116.          LEA.L     FIRST(PC),A0
  117.          CMP.L     A0,D1
  118.          BMI.S     TISOK               TRACING BELOW OURSELVES
  119.          LEA       LAST(PC),A0
  120.          CMP.L     A0,D1
  121.          BHI.S     TISOK               TRACING ABOVE OURSELVES
  122.          LEA       MSG020(PC),A5       TRACING OURSELVES
  123.          BRA       CHKBP4                                            1,1
  124. TISOK
  125.  SPC 1
  126.          LEA       BPADD,A0
  127.          LEA       BPCNT,A2
  128.          MOVE.L #9,D7  9TH BP IS "UNTILL" FEATURE
  129.  SPC 1
  130. TRACE01  CMP.L (A0),D1  SEE IF PC MATCHES ADDRESS IN TABLE
  131.          BNE.S TRACE08
  132.          MOVE.L (A2),D0  GET COUNT
  133.          BEQ     CHKBP3      COUNT ZERO
  134.          SUB.L #1,D0  COUNT DOWN
  135.          MOVE.L D0,(A2)  SAVE IT
  136.          BEQ     CHKBP3      COUNT WENT TO ZERO
  137.          BRA.S   TRACE03
  138.  SPC 1
  139. TRACE08  ADD.L #4,A0  BUMP TABLE POINTER
  140.          ADD.L     #4,A2     BUMP COUNT TABLE POINTER
  141.          SUB.L #1,D7 LOOP AROUND
  142.          BNE TRACE01
  143.  SPC 1
  144. TRACE03  BSR       TDISPLY   DO TRACE DISPLAY
  145.          SUB.L     #1,TRACECNT  TRACE COUNT
  146.          BEQ       MACSBUG   STOP WHEN ZERO
  147.          BRA.S     UNTRACE   CONTINUE WITH TRACE
  148.  SPC 3
  149. * END UP HERE AFTER BREAKPOINTING ONE
  150. * INSTRUCTION-PUT BP BACK IN AND CONTINUE TO RUN
  151. TRACE39  CLR.L TRACECNT
  152.          BSR.S     SWAPIN    PUT BP INTO USER'S MEMORY
  153.          BRA.S UNSTACK  CONTINUE TO RUN
  154.  PAGE
  155. UNTRACE  OR.W      #$8000,REGSR+2      SET UP TRACE BIT!
  156.          ADDR2MEM  TRACE,AV9           TAKE TRACE VECTOR
  157.  SPC 1
  158. UNSTACK  MOVE.L  REGUS,A1
  159.          MOVE.L  A1,USP      US = TARGET'S USER STACK
  160.          MOVE.L    REGPC,A2  A2 = TARGET'S PC
  161.  SPC 1
  162.          DS        0         INSURE MEMORY AT LOCATION OF PC
  163.          MOVE.W    (A2),D0   * ADDR TRAP ERROR * IF NO MEMORY
  164.  SPC 1
  165.          MOVE.L    REGA7,A1  A1 = TARGET SYSTEM STACK (SS)
  166.  SPC 1
  167.          DS        0         INSURE MEMORY AT TARGET'S STACK
  168.          MOVE.L    A2,-(A1)  MOVE PC ONTO TARGET'S STACK
  169.  SPC 1
  170.          MOVE.W  REGSR+2,D0
  171.          MOVE.W  D0,-(A1)    SR ONTO TARGET'S STACK
  172.  SPC 1
  173.          MOVE.L  A1,TEMP     TEMP = TARGETS SS
  174.  SPC 1
  175.          LEA     REGS,A7     A7 = POINTER TO PSUEDO REGISTERS
  176.          MOVEM.L (A7)+,D0-D7/A0-A6  ARM MOST OF TARGET REGISTERS
  177.          MOVE.L  TEMP,A7     SS = TARGET'S
  178.  SPC 1
  179.          RTE  .  GO BACK TO THE USER
  180.  PAGE
  181. SWAPIN   BSR.S  SWAPOUT             MAKE SURE THEY ARE ALL OUT
  182.  SPC 1
  183.          MOVE.L    AV4,SAVEAV4         SAVE VECTOR (WHOM EVER'S IT WAS)
  184.          LEA       CHKBP(PC),A6
  185.          MOVE.L    A6,AV4              REPLACE IT WITH THE "CHKBP" RTN
  186.          LEA       SWAPIN1(PC),A6      A6 = ROUTINE ADDRESS
  187.          BRA.S  SWAP
  188.  SPC 1
  189. SWAPOUT  TST.W  BPSTATUS        SEE IF OUT ALREADY
  190.          BEQ.S  SWAPEND         YES...DONE
  191.          MOVE.L    SAVEAV4,AV4         NO....REPLACE THE VECTOR
  192.  SPC 1
  193.          LEA       SWAPOUT1(PC),A6     A6 = ROUTINE ADDRESS
  194. SWAP     LEA       BPADD,A0       A0 = ADDRESS OF TABLE
  195.          LEA       BPCNT,A2       A2 = ADDRESS OF COUNTS
  196.          MOVE.L #9,D7  DO 9 BP
  197.          LEA       BPDATA,A3  CONTENT TABLE
  198.  SPC 1
  199. SWAP1    MOVE.L    (A0),A4   GET POSSIBLE ADDDRESS
  200.          TST.L  (A0)         IS POSSIBLE ADDRESS ZERO
  201.          BEQ.S SWAP99  ZERO MEANS NO BP DEFINED
  202.          JMP (A6)  GO TO RIGHT ROUTINE
  203.  SPC 1
  204. SWAPIN1
  205.          MOVE.W (A4),D0    USER'S PROGRAM GOES INTO TABLE
  206.  SPC 1
  207.          MOVE.W D0,(A3)
  208.          MOVE.W #BKPOINT,(A4)  PUT BREAKPOINT IN
  209.  SPC 1
  210.          MOVE.W #1,BPSTATUS  FLAG AS BP IN
  211.          BRA.S SWAP99
  212.  SPC 1
  213. SWAPOUT1 MOVE.W (A3),D0   GET CONTENTS FROM TABLE
  214.          MOVE.W D0,(A4) PUT CONTENTS BACK INTO PROGRAM
  215.  SPC 1
  216.          CLR.W BPSTATUS  FLAG AS BREAKPOINTS OUT
  217. SWAP99   ADD.L #4,A0  BUMP ADDRESS TABLE POINTER
  218.          ADD.L #2,A3 BUMP CONTENT TABLE POINTER
  219.          SUB.L #1,D7
  220.          BNE SWAP1
  221. SWAPEND  RTS
  222.          PAGE
  223. *  ILLEGAL INSTRUCTION ENTRY POINT
  224. *   BREAKPOINT TEST
  225. *
  226. CHKBP    MOVE.W #$2700,SR  MASK OF INT.
  227.          SAVEREGS
  228.          MOVE.L REGPC,D0  GET PROGRAM COUNTER TO COMPARE
  229.          MOVE.L D0,A5        A5 = TARGET PC
  230.          MOVE.W    (A5),D1   SEE WHAT OP CODE WAS XEQ
  231.  SPC 1
  232.          BSR       SWAPOUT   TAKE BREAKPOINTS OUT
  233.  SPC 1
  234.          CMP.W #BKPOINT,D1   USED FOR BP
  235.          BNE.S CHKBP11       NOT AT BREAKPOINT
  236.  SPC 1
  237.          LEA       BPADD,A0  A0 = ADDRESS OF BP ADDRESSES
  238.          LEA       BPCNT,A2  A2 = ADDRESS OF BP COUNTS
  239.          MOVE.L    #9,D7     D7 = LOOP COUNT
  240.  SPC 1
  241. CHKBP1   CMP.L     (A0),A5   SEE IF WE ARE THERE
  242.          BEQ.S CHKBP2        AT BREAKPOINT; AT AN ADDRESS
  243.  SPC 1
  244.          ADD.L #4,A0  BUMP BOTH POINTERS
  245.          ADD.L #4,A2
  246.          SUB.L #1,D7
  247.          BNE CHKBP1
  248.  SPC 1
  249. * IS NOT A BREAKPOINT; ASSUME ILLEGAL INSTRUCTION
  250. CHKBP11  LEA       MSG009(PC),A5          'ILLEGAL INSTRUCTION'
  251.          CLR.W     TRACEON             RESET TRACE MODE              1,1
  252.          BRA.S     CHKBP4
  253.  SPC 1
  254. * AT BREAKPOINT...CHECK COUNT
  255. CHKBP2   MOVE.L    (A2),D0   GET COUNT
  256.          BEQ.S     CHKBP3    COUNT ZERO
  257.          SUB.L #1,D0  DECREMENT
  258.          MOVE.L D0,(A2)  PUT COUNT BACK
  259.          BNE       GOCMD1    COUNT NOT ZERO; KEEP GOING
  260.  SPC 1
  261. CHKBP3   LEA       MSG014(PC),A5          "AT BREAKPOINT"
  262.  SPC 1
  263. CHKBP4   BSR       FIXDCRLF
  264.          BSR       OUT1CR
  265.          BSR       TDISPLY             PRINT TRACE DISPLAY
  266.          BRA       MACSBUG
  267.  SPC 1
  268. MSG009   DC.B      'ILLEGAL INSTRUCTION',EOT
  269.  SPC 1
  270. MSG014   DC.B      'AT BREAKPOINT',EOT
  271.  SPC 1
  272. MSG020   DC.B      '.PC within "DEBUGGER"',BELL,EOT
  273.          END